perm filename PAGE.F4[PAG,LCS]17 blob
sn#573383 filedate 1981-03-24 generic text, type T, neo UTF8
00100 C***** AIDS IN EXTRACTING PARTS FROM SCORES AND DOES AUTOMATIC PAGE LAYOUT.
00200 C***************************** THERE ARE STILL SEVERAL BUGS IN THIS PROG.
00300 C***************************** TRANSPOSE-ONLY IS NOT FULLY TESTED.
00400 C*********** TRANSPOSITION OF 'F' PARTS IN BASS CLEF HAS SOME PROBLEMS.
00500 C***************************** ETC., ETC. 8/78
00600
00700 C SEE PAGE.CMD FOR LOADING INSTRUCTIONS
00800 C **** SUBROUTINE LIST *****
00900 C PAGE: READX
01000 C RESPC:
01100 C RESTP:
01200 C WRTPAG:
01300 C PGSUB: FILOUT(NAMQ,NPG), FILEIN, STAVES
01400 C TRONLY:
01500 C TRNSP: TRNSP, RVRS
01600 C PTMOVX: PTMOVE, TURN
01700 C FNDTRN: MNMX, FNDTRN, BRJUGL, GET
01800 C PFAIL: LOOKF,LOOKX,LOOK,SHFTQ,SORT2,NORH,FNDEND,MINMAX,RLOOP,BLTEM,IFIX,FLOAT
01900 C GETPTS,MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0,PSHFT,ADRST,STAFF
02000 C RIGHT,RESTS,EXCHG,EXCH,SHRNK,EXPND,CLFNUM,SLRV,CLEFN,MMNN,CODEN,ZERO
02100 C EXT: PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
02200
02300 COMMON/STF/RSTFAC(0/7),RSTJ2 /POSI/STFF(0/7),JJ2,JPQ
02400 1 /IPG/IPG,JPG,BRACK(0/7),RSTNUM(8),RPSZ(8),RHGT(8),
02500 1 RCLEF(0/7) /RSIG/RSIG(0/7) /IVV/NRD(200)
02600 COMMON RS,JA,REST,J2,RQ(18),JX,PR,LX,RDIS
02700 C ORDER OF COMMON BLOCKS **MUST** STAY AS IS!
02800 COMMON/XRN/RN(3500) /SF/KL,RT,KP,STFSZ,NAMX,EXT
02900 1 /PTR/KWDS(350)/LLL/LLL,LL,I,IX,XSIG/XXX/LK,LP,JY /JN/J,N
03000 C INCREASE DIMENSION OF KWDS (KPN & Q) FOR VERY FULL PAGES.
03100 DIMENSION MM(1500),NN(1500),BARS(509),STFNM(0/7),KSAVE(30),
03200 1 RMETER(0/7),RCL(0/7),NUMS(30),PGTRN(500),SAVES(470),U(1)
03300 C KSAVE AND SAVES ARE TO SAVE REHEARSAL NUMS, ETC. -- LIMIT=30
03400 COMMON /PX/KPN(450) /Q/Q(4000) /KBAR/KBAR(1027) /IRST/IRST
03500 1 /RCLF/KK,CLEF,KW,ITEM,RSTAFF,SN,YN,RNAM,RNAM2,RNAM3
03600 1 /RSP/KNM(100) /ENDL/ENDLN,KQ,NAME,NMPG,SPCNT,LASTNM
03700 1 /JWDS/JWDS(300),RRN(3000)
03800 C JWDS IS EQUIVALENCED IN PTMOVX.F4 AND RESTP.F4
03900 DATA FIB/.7/,RSPC/25./,PGNUM/1.6/,RNMHT/16.0/,RNMSZ/1.0/
04000 1 ,RLTRSZ/1.0/,SPCPG/2.7/
04100 EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
04200 1,(MM,RN),(NN,RN(1501)),(KS,RS),(BARS,KBAR(4)),(JRSTF,RSTJ2)
04300 1,(R8,RQ(6)),(R9,RQ(7)),(RQ(10),XLFT),(KBR,KBAR),(T,KBAR(2))
04400 1,(STFNM,KBAR(508)),(NUM1,NUMS,KPN),(PGTRN(1),KBAR(5 16))
04500 1,(SAVES,Q(3001)),(KSAVE,Q(3475)),(U,KBAR(1026))
04600 C HANDLES 503 PAGES AND PAGE-TURN INFO. IN KBAR AND PGTRN
04700 C RQ(2) IS R4, RQ(3) IS R5 ETC. STAFF NAMES START AT KBAR(508)=STF(0)
04800
04900 RN(2)=0
05000 EXT='MS'
05100 IRST=0
05200 C IRST IS USED IN SUBROUTINE RESTP
05300 IPG=0
05400 KBR=0
05500 NMPG='PAGEA'
05600 JPG=0
05700 JRD=1
05800 ENDLN=0
05900 SAVSIZ=0
06000 ISN=0
06100 NCNT=10000
06200 IFOUND=0
06300
06400 TYPE 1000
06500 ACCEPT 2000,NAMX
06600 IF(NAMX.EQ.0)CALL PT2
06700 IF(NAMX.EQ.3)CALL TRONLY
06800 NPG=NAMX-2
06900 TYPE 3300
07000 IF(NPG.GE.0)GO TO 3000
07100 CC IF(NPG.GE.0)TYPE 3
07200 ACCEPT 2,KS,NTYPE
07300 C TYPE -1 AFTER NAME(I.E.5 SPACES) TO PRINT INST. NAMES AS READ.
07400 CC NAMZ=KS
07500 JNM=1
07600
07700 CALL LO2UP(KS)
07800 143 CALL IFILE(1,KS)
07900 READ(1,2)K
08000 CC843 READ(1,2)K
08100 IF(K.NE.'COMME')GO TO 543
08200 743 READ(1,643),K,K,K
08300 C READ ET DIRECTORY !∃∀ βλπα∀πεβα!ββX!
08400 IF(K.NE.';')GO TO 743
08500 READ(1,2)K
08600 GO TO 843
08700 C FIRST LINE MUST BE EXTENSION NAME
08800 643 FORMAT(3A1)
08900 2 FORMAT(A5,30I)
09000 CC3 FORMAT(' TYPE FILE NAME.EXT -- '$)
09100 3300 FORMAT(' TYPE FILE NAME -- '$)
09200 1000 FORMAT(' 1=PARTS, 2=PAGE LAYOUT, 3=TRNSP ONLY, <CR>=OLD '$)
09300 2000 FORMAT(I)
09400 CC543 READ(1,2,END=343),KNM(JNM),(KPN(K),K=1,30)
09500 543 CALL IFILE(1,KS)
09600 843 CALL READX(1,KNM(JNM),EXT,KEND,NUMS)
09700 IF(KEND)GO TO 343
09800 JNM=JNM+1
09900 DO 434 K=1,30
10000 J=KPN(K)
10100 JPG=JPG+1
10200 NRD(JPG)=J
10300 C BE CAREFUL ABOUT RUNNING OVER NRD ARRAY (100)-- ZEROS ARE INSERTED***********
10400 434 IF(J.EQ.0)GO TO 843
10500 GO TO 843
10600 CC3000 CALL NAMEXT
10700 3000 CALL READX(5,NAMX,EXT,KEND,NUMS)
10800 KNM(1)=NAMX
10900 GO TO 4000
11000 343 KNM(JNM)=-1
11100 NXX=NRD(1)
11200 C NXX COULD BE EQUIV. TO NRD(1)!!
11300 4000 NAMZ=KNM(1)
11400 IF(NPG.GE.0.AND.NUM1.GT.0)NCNT=NUM1
11500 C TYPE A # AFTER FILE NAME TO SET # OF FILES TO BE READ.
11600 DO 911 K=0,7
11700 RCLEF(K)=99
11800 RCL(K)=99
11900 RMETER(K)=99
12000 C INITS STUFF FOR PAGE LAYOUT
12100 BRACK(K)=0
12200 911 RSIG(K)=99
12300
12400 744 XSIG=FIB
12500 QSIG=FIB
12600 CLEF=-1
12700 XMTR=FIB
12800 XLFT=0
12900 JPG=0
13000 YCLEF=2.
13100 YSIG=2.
13200 YMTR=2.
13300 RSTAFF=0
13400 RM=0
13500 JNM=1
13600 CZ1344 JNM=1
13700
13800 1344 IF(NCNT.EQ.0)GO TO 1212
13900 C NCNT IS INPUT FILE COUNTER.
14000 NCNT=NCNT-1
14100 ZLFT=.5
14200 KQ=0
14300 IF(NPG.EQ.0)JRD=0
14400 LLL=1
14500 LK=1
14600 86 FORMAT(1XA5)
14700 186 FORMAT(1XA5,'.',A3)
14800
14900 83 NAME=KNM(JNM)
15000 CZ JNM=JNM+1
15100 IF(NAME.EQ.-1)GO TO 1212
15200 CC JRD=JRD+1
15300 CXCX NXX=NRD(JRD+1)
15400 CZ NXX=NRD(JRD)
15500 C????????????? IF(KBR.EQ.0)GO TO 284
15600 JZ=-1
15700 10 IF(LOOKX(NAME,EXT))GO TO 284
15800 CZ100 IF(JZ)GO TO 344
15900 C FOUND NO MORE TO READ
16000 344 NAME=NAMZ+256
16100 C UPDATE 4TH CHAR. (E.G. AAAAA TO AAABA)
16200 NAMZ=NAME
16300 KNM(JNM)=NAME
16400 IF(LOOKX(NAME,EXT))GO TO 284
16500 C NOW ALL DONE WITH INPUT, START OUTPUT
16600 1212 CALL PUTEXT('BARS','PAG')
16700 RSTJ2=SAVSIZ
16800 DO 1213 K=0,75
16900 1213 U(K)=RSTFAC(K)
17000 C SAVE VARIOUS THINGS ON END OF KBAR ARRAY FOR USE IN OUTPUT SECTION.
17100 CALL EXTOUT(KBAR,1100)
17200 CC CALL EXTOUT(RSTFAC,128)
17300 CALL FINEXT
17400 C K (NUM OF BARS - UP TO 511) IS FIRST LOC OF KBAR.
17500 CALL PT2(KPN,Q,KWDS,RN)
17600
17700 284 JZ=0
17800 SN=0
17900 IF(NPG)SN=200
18000 SNMTR=SN
18100 IF(RM.NE.0)GO TO 277
18200 RM=-1
18300 4 FORMAT(' TYPE INST NAME '$)
18400 IF(NPG.GE.0)GO TO 277
18500 TYPE 4
18600 ACCEPT 2,RNAM,K
18700 CALL LO2UP(RNAM)
18800 RNAM2=-1
18900 RNAM3=-1
19000 RNAM4=-1
19100 IF(K.EQ.0)GO TO 277
19200 TYPE 177
19300 ACCEPT 2,RNAM2,K
19400 CALL LO2UP(RNAM2)
19500 IF(K.EQ.0)GO TO 277
19600 C TYPE NUM AFTER NAME TO ENTER UP TO 4 NAMES.
19700 TYPE 177
19800 ACCEPT 2,RNAM3
19900 CALL LO2UP(RNAM3)
20000 TYPE 177
20100 ACCEPT 2,RNAM4
20200 CALL LO2UP(RNAM4)
20300 177 FORMAT(' OTHER INST NAME ',$)
20400
20500
20600 277 TYPE 186,NAME,EXT
20700 C*** CALL GETEXT(NAME,EXT)
20800 C*** C LP IS START OF RN ARRAY THIS TIME
20900 C*** CALL EXTIN(RSTFAC,20)
21000 C*** CALL EXTIN(KWDS,JJ2)
21100 C*** CALL EXTIN(RN,JPQ)
21200 CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
21300 C NEW SAVE FORMAT
21400 IF(JRSTF.LT.10000)RSTJ2=1.0
21500 C X!Z+*↑: WHERE IS THE BUG THAT PUTS AN INTEGER INTO RSTJ2????
21600 CZ IF(SAVSIZ.EQ.0)SAVSIZ=RSTJ2
21700 IPG=NPG
21800 C IPG MUST BE RESET EACH TIME BECAUSE READIN WIPES IT OUT.
21900
22000 CALL RLOOP(Q,RN,JPQ)
22100 ITEM=JJ2-2
22200
22300 1211 R=RN(KWDS(1)+2)
22400 K=2
22500 LS=1
22600 J=0
22700 C SORTS NOTES AND RHYTH ONLY
22800 1111 KX=KWDS(K)
22900 RA=RN(KX+2)
23000 IF(RA.GE.R)GO TO 1011
23100 CALL EXCH(KWDS(K),KWDS(LS))
23200 J=-1
23300 1011 R=RA
23400 2611 LS=K
23500 K=K+1
23600 IF(K.LE.ITEM)GO TO 1111
23700 IF(J)GO TO 1211
23800 C NOW ALL SORTED (BY STAFF)
23900 J=1
24000 KW=1
24100
24200 DO 1311 K=1,ITEM
24300 LS=KWDS(K)
24400 IF(RN(LS+1).GT.2)GO TO 2711
24500 RN(LS+3)=RN(LS+3)-.001
24600 C MOVE ALL NOTES AND RESTS SLIGHTLY TO LEFT. (FOR SORTER)
24700 2711 M=RN(LS)+3
24800 CALL RLOOP(Q(J),RN(LS),M)
24900 J=J+M
25000 KPN(K)=KW
25100 1311 KW=KW+M
25200
25300 KPN(ITEM+1)=KW
25400 CC DO 1511 K=1,ITEM+1
25500 CC1511 KWDS(K)=KPN(K)
25600 CC DO 1611 K=1,JPQ
25700 CC1611 RN(K)=Q(K)
25800 CALL BLTEM
25900 C BLTEM BLTS ARRAYS KPN AND Q INTO KWDS AND RN
26000
26100 DO 18 K=1,JPQ
26200 18 Q(K)=0
26300 C ZERO IT FOR FUTURE SAFETY
26400
26500 JCUE=0
26600 RLFT=10000
26700 811 DO 577 K=1,ITEM
26800 R=CODEN(KWDS,K,RN,J)
26900 IF(R.GT.2)GO TO 809
27000 IF(RLFT.GT.RN(J+3))RLFT=RN(J+3)
27100 C RLFT IS LEFT-MOST NOTE OR REST. USED FOR DISCARDING ENTERING SLURS.
27200 GO TO 577
27300 809 IF(R.LT.4)GO TO 577
27400 RWD=RN(J)
27500 C RWD IS WDCNT OF EACH ITEM
27600 JS=RN(J+2)
27700 IF(IPG.LT.0)GO TO 111
27800 C IPG=-1 = EXTRACTING PARTS, =0 = PAGE LAYOUT.
27900 IF(R.NE.8)GO TO 211
28000 STFNM(JS)=0
28100 IF(RWD.GE.7)STFNM(JS)=RN(J+9)
28200 C SAVES STAFF IDENT. NAME
28300 1811 IF(ENDLN.NE.0)GO TO 577
28400 JPG=JPG+1
28500 LS=JS+1
28600 RSTNUM(LS)=JS
28700 RHGT(LS)=0
28800 IF(RWD.GE.2)RHGT(LS)=RN(J+4)
28900 RPSZ(LS)=RSTFAC(JS)
29000 IF(SAVSIZ.EQ.0)SAVSIZ=RPSZ(LS)
29100 IF(R5.EQ.0)SPCNT=SPCPG*RPSZ(LS)
29200 211 IF(R.NE.4)GO TO 577
29300 IF(RN(J+3).LT.RLFT)GO TO 311
29400 CC IF(RN(J+3).LT.ZLFT)GO TO 311
29500 C ASSUMES NOTE OR REST HAS ALREADY BEEN SEEN. (ZLFT=P3+.5)
29600 IF(RN(J+2).NE.0)RN(J+1)=44
29700 CC IF(RN(J+2).EQ.0)GO TO 577
29800 CC511 RN(J+1)=44
29900 C BARS NOT ON STAFF ZERO NOW HAVE CODE NUM. 44
30000 GO TO 577
30100 311 IF(IPG.LT.0)GO TO 577
30200 IF(ENDLN.NE.0)GO TO 577
30300 IF(RWD.GE.5)BRACK(JS)=RN(J+7)+RN(J+4)*100.
30400 C SAVE 'BRACKET' INFO (P7=3,4 OR 5) - CAN FIND WRONG THING!!
30500 GO TO 577
30600
30700 111 IF(R.NE.8)GO TO 112
30800 IF(RWD.LT.7)GO TO 577
30900 C NO NAME ON THIS STAFF - SO JUMP
31000 IF(RN(J+7).NE.0)GO TO 577
31100 C SKIPS INVISIBLE STAVES.
31200 XLFT=RN(J+3)
31300 C LEFT LIMIT OF STAFF
31400 R9=RN(J+9)
31500 IF(NTYPE.LT.0)TYPE 86,R9
31600 IF(R9.EQ.RNAM)GO TO 977
31700 IF(RNAM2.EQ.R9)GO TO 977
31800 IF(RNAM3.EQ.R9)GO TO 977
31900 IF(RNAM4.NE.R9)GO TO 577
32000 977 TYPE 1577,R9,NAME
32100 IF(SN.NE.200.)PAUSE ' **** SAME NAME FOUND AGAIN ****'
32200 I=JS+RSTAFF
32300 SN=I
32400 SNMTR=SN
32500 IFOUND=-1
32600 C FLAG TO SAVE RN AND KWDS ARRAYS
32700 RPSZ(1)=RSTFAC(JS)
32800 IF(SAVSIZ.EQ.0)SAVSIZ=RPSZ(1)
32900 C SO IT WON'T LOOK ON MORE STAVES IN OTHER FILES.
33000 CZ IF(NXX.GT.1)NXX=-NXX
33100 C THIS TAKEN OUT 3/7/80 BECAUSE DIDN'T FIND WORDS IN LOWER FILES.
33200 JCUE=-1
33300 CCC IF(IPG.LT.0)TYPE 1577,R9,NAME
33400 C WE ONLY GET WHEN EXTRACTING PARTS.
33500 GO TO 577
33600 1577 FORMAT(1XA5,' FOUND IN ',A5)
33700 CXXX GO TO 477
33800 112 IF(IPG.GE.0)GO TO 577
33900 IF(R.NE.16)GO TO 113
34000 IF(RN(J+5).LT.100)GO TO 577
34100 GO TO 1113
34200 113 IF(R.NE.10)GO TO 577
34300 C SKIPS PAGE NUMS. (I.E. P7 > 2)
34400 IF(RN(J+6).LT.100)GO TO 577
34500 C SAVE NUMBER IF SIZE FACTOR(R6) IS +100 (JUST LIKE CODE 16)
34600 C????******ALL THIS TO 800-1 CAN NOW BE TAKEN OUT. USE P6+100 FOR REHRSL. #S.
34700 RN(J+4)=RNMHT
34800 RN(J+6)=RNMSZ
34900 C THE ABOVE SET HEIGHT AND SIZE OF REHEARSAL NUMS.
35000 1113 RN(J+2)=0
35100 C PARTS ARE ALWAYS ON STAFF 0
35200 CX JS=J
35300 JJK=RWD+2+LK
35400 CX DO 1112 JJJ=LK,JJK
35500 CX SAVES(JJJ)=RN(JS)
35600 CX1112 JS=JS+1
35700 I=JJK-LK+1
35800 CALL RLOOP(SAVES(LK),RN(J),I)
35900 C PUTS RN INTO SAVES
36000 LK=JJK+1
36100 RN(J+2)=10.
36200 LLL=LLL+1
36300 KSAVE(LLL)=LK
36400 577 CONTINUE
36500 C DIDN'T FIND USEFUL INFO SO SKIP THIS FILE
36600 CX IF(JCUE)GO TO 477
36700 CCC IF(IPG)TYPE 1577,RNAM,NAME
36800 477 I=JPQ-2
36900 C READS AND WRITES 1 EXTRA WORD
37000 IF(IPG.EQ.0)GO TO 13
37100
37200 IF(IFOUND.GE.0)GO TO 877
37300 IFOUND=-IFOUND
37400 JTEM=ITEM+1
37500 DO 1877 K=1,JTEM
37600 1877 JWDS(K)=KWDS(K)
37700 DO 2877 K=1,KWDS(JTEM)
37800 2877 RRN(K)=RN(K)
37900 C NOW DATA FOR THIS INST. IS SAVED.
38000
38100 CZ IF(NXX.GT.0)GO TO 877
38200 C NEXT FOR PARTS ONLY. TO SKIP A FILE (OR MORE)
38300 CZ NAME=NAME-2*(NXX+1)
38400 CZ NXX=1
38500 877 NXX=NXX-1
38600 KNM(JNM)=NAME
38700 NAME=NAME+2
38800 IF(NXX.NE.0)GO TO 277
38900 JRD=JRD+1
39000 NXX=NRD(JRD)
39100 IF(NXX.NE.0)GO TO 44
39200 JNM=JNM+1
39300 NAMZ=KNM(JNM)
39400 KNM(JNM)=NAMZ-2
39500 C KNM GETS BACK +2 AT RETURN FROM RESPC.
39600 JRD=JRD+1
39700 NXX=NRD(JRD)
39800 CZ NAME=0
39900 CZ NAMZ=0
40000 44 RSTAFF=0
40100 13 YN=0
40200 IF(SN.NE.200)GO TO 8
40300 YN=-1
40400 IF(YCLEF.GT.1)YCLEF=-1
40500 IF(YSIG.GT.1)YSIG=-1
40600 IF(YMTR.GT.1)YMTR=-1
40700
40800 8 ZLFT=XLFT+.5
40900 RNUM=PGNUM
41000 C SIZE FACTOR FOR PAGE NUMBER FINDER (MAYBE).
41100 QLFT=RLFT
41200 C SAVE IN QLFT FOR 1ST BAR OF LINE CHECK.
41300 RLFT=RLFT-3
41400 C TO CATCH 1ST SLURS.
41500 JCUE=0
41600
41700 C**** IF(LK.EQ.1)GO TO 2112
41800 IF(LK.EQ.1)GO TO 2113
41900 CX DO 3112 K=1,LK
42000 CX3112 Q(K)=SAVES(K)
42100 CALL RLOOP(Q,SAVES,LK)
42200 C PUTS SAVED THINGS INTO Q ARRAY AND POINTER ARRAY (KPN)
42300 CX DO 4112 K=2,LLL
42400 CX4112 KPN(K)=KSAVE(K)
42500 CALL RLOOP(KPN,KSAVE,LLL)
42600 KPN(1)=1
42700 2113 IF(IPG.EQ.0)GO TO 2112
42800 IF(IFOUND.EQ.0)GO TO 2112
42900 IFOUND=0
43000 DO 183 K=1,JTEM
43100 183 KWDS(K)=JWDS(K)
43200 DO 283 K=1,KWDS(JTEM)
43300 283 RN(K)=RRN(K)
43400 ITEM=JTEM-1
43500 C NOW GOT BACK DATA FOR SINGLE INST.
43600
43700 C THIS SECTION COLLECTS ALL ITEMS TO USED LATER(NOT EVERYTHING IF 'PARTS')
43800 2112 DO 6 K=1,ITEM
43900 R5=-1
44000 R=CODEN(KWDS,K,RN,J)
44100 IF(R.EQ.0)GO TO 6
44200 C DUPLICATE BARS WERE CHANGED TO CODE 0
44300 RWD=RN(J)
44400 C RWD IS WDCNT OF EACH ITEM
44500 800 IF(R.NE.4)GO TO 80
44600 IF(RN(J+4).GE.1000)GO TO 801
44700 C FINDS DBL BARS OF ALL SORTS
44800 IF(RWD.GT.2)GO TO 182
44900 C FOUND A BAR LINE
45000 CC801 IF(RN(J+3).LT.ZLFT)GO TO 6
45100 801 IF(RN(J+3).LT.QLFT)GO TO 6
45200 CC801 IF(RN(J+3).LT.RLFT)GO TO 6
45300 C DROPS BAR LINE TO LEFT OF FIRST NOTE OR REST.
45400 IF(IPG.EQ.0)GO TO 382
45500 IF(RWD.LT.2)GO TO 382
45600 LL=RN(J+4)/100.
45700 RR=100*LL+1.0
45800 RN(J+4)=RR
45900 C THIS PRESERVES DOUBLE BARS OF ALL SORTS.
46000 CCC IF(RN(J+2).NE.0)GO TO 182
46100 C KEEP BAR LINES ON STAVES >0 BUT DON'T COUNT THEM.
46200 382 CALL DBAR(K,ITEM,J)
46300 IF(YN.EQ.0)GO TO 810
46400 CALL ADRST(KPN,RR)
46500 GO TO 6
46600 182 RN(J+1)=44
46700 C CHANGES CODE NUM
46800 IF(IPG.EQ.0)GO TO 482
46900 IF(RN(J+5).EQ.150)RN(J+2)=SN
47000 C P5=150=PUT CRESC-DECRESC. IN ALL PARTS (WHEN IN PARTS MODE [IPG=-1])
47100 482 IF(RWD.LT.5)GO TO 80
47200 IF(RN(J+7).GE.3)GO TO 6
47300 C SKIP HEAVY BRACKETS.
47400 IF(RWD.LT.4)GO TO 80
47500 A=RN(J+6)
47600 IF(A.EQ.0)GO TO 80
47700 IF(A.GE.199)RN(J+6)=200
47800
47900 80 IF(R.NE.16)GO TO 180
48000 IF(RWD.LT.8)GO TO 180
48010 C3/81 IF(RWD.LT.8)GO TO 280
48100 IF(RN(J+10).EQ.1)RN(J+3)=RN(KWDS(K-1)+3)
48200 C PUT CONTINUATION OF TEXT IN SAME POS. AS 1ST UNIT OF TEXT.
48300 C3/81 280 IF(IPG.EQ.0)GO TO 180
48400 C3/81 IF(RN(J+5).GE.100)RN(J+2)=SN
48450 C3/81**** WANTED TEXT ALREADY SAVED IN 'SAVE' ARRAY ****
48500 C CATCHES WANTED TEXT ON OTHER LINES. (P5>100)
48600 CXXX IF(RN(J+5).GT.RLTRSZ)RN(J+5)=RLTRSZ
48700 C LIMITS SIZE OF LETTERS. ADJUST RLTRSZ TO SUIT. (SET AT 1.0 NOW)
48800
48900 180 RSN=RN(J+2)
49000 IF(IPG.LT.0)GO TO 2011
49100 ISN=RSN
49200 RSN=SN
49300 C THE STAFF NUM.
49400
49500 2011 IF(R.NE.3)GO TO 3801
49600 IF(IPG.LT.0)GO TO 2111
49700 CLEF=RCL(ISN)
49800 GO TO 4801
49900 2111 IF(RN(J+6).LT.100)GO TO 4804
50000 RN(J+2)=SN
50100 C SIZE +100 (R6) IS PUT IN ALL PARTS (FOR P,PP,PPP,MF, ETC.)
50200 GO TO 4803
50300 4804 IF(YCLEF)GO TO 4801
50400 IF(RSN.NE.SN)GO TO 6
50500 4801 RR=CLEFN(RN,J)
50600 C GET CLEF NUMBER.
50700 IF(RR.EQ.CLEF)GO TO 6
50800 C SKIP DUPLICATE CLEFS.
50900 IF(RR.GT.4)GO TO 4800
51000 C 0=TREB 1=BASS 2=ALTO 3=TENOR 4=PERCUSSION CLEF.
51100 IF(IPG.LT.0)GO TO 17
51200 RCL(ISN)=RR
51300 IF(RCLEF(ISN).EQ.99)RCLEF(ISN)=RR
51400 C SAVE FIRST CLEF ON EACH STAFF
51500 GO TO 1800
51600 CP16 FORMAT(' CLEF=',F2.0,' --CHANGE TO--',$)
51700 CP TYPE 16,RR
51800 CP ACCEPT 5,RR
51900 17 R5=RR
52000 CLEF=RR
52100 YCLEF=0
52200 GO TO 1800
52300 4800 IF(RSN.NE.SN)GO TO 6
52400 4803 RN(J+1)=33
52500 GO TO 1800
52600 4802 YCLEF=0
52700 C CATCHES CLEF AFTER FIRST RESTS.
52800 GO TO 6
52900
53000 3801 IF(R.NE.17)GO TO 3800
53100 RR=RN(J+5)
53200 IF(IPG.GE.0)GO TO 3803
53300 IF(RSN.NE.SN)GO TO 6
53400 C FOR PARTS: SKIP IF NOT ON RIGHT STAFF.
53500 IF(QSIG.EQ.RR)GO TO 6
53600 C FOR PARTS: IF SAME KEY SIG. THEN OMIT IT.
53700 QSIG=RR
53800 GO TO 3804
53900 3803 IF(RR.EQ.RSIG(ISN))GO TO 6
54000 C SKIPS DUPL. KEY SIGS.
54100 C***** WHAT ABOUT CHANGING KEY SIGS?????
54200 RSIG(ISN)=RR
54300 GO TO 1800
54400 C****10/2/80**** ABOVE 2 FOR CHANGING KEY SIG. ( I HOPE!)
54500 CC YSIG=0
54600 3804 IF(RSIG(ISN).EQ.99)RSIG(ISN)=RR
54700 C SETS UP KSIG ONCE ONLY.
54800 GO TO 1800
54900
55000 3800 IF(R.EQ.8)GO TO 6
55100 C OMIT ALL STAVES FOR NOW
55200 IF(R.NE.18.)GO TO 81
55300 CP IF(IPG)GO TO 2311
55400 XMTR=RMETER(ISN)
55500 GO TO 1801
55600 2311 IF(YMTR)GO TO 1801
55700 IF(SNMTR.EQ.200.)SNMTR=RSN
55800 C SO IT WON'T REPEAT METERS.
55900 C CHECK ALL METERS IF LINE HAS NOT THIS INST.
56000 IF(RSN.NE.SNMTR)GO TO 6
56100 1801 RA=TSIG(RN,J)
56200 C THE TIME SIG.
56300 IF(XMTR.EQ.RA)GO TO 6
56400 XSIG=RA
56500 XMTR=RA
56600 YMTR=0
56700 IF(IPG.LT.0)GO TO 181
56800 RMETER(ISN)=RA
56900 GO TO 1800
57000 181 RR=RN(J+3)
57100 DO 281 LS=1,LLL-1
57200 IF(CODEN(KPN,LS,Q,KW).NE.R)GO TO 281
57300 C LOOK FOR SAME METER CLOSE TO SAME POS. (DIF. METER WILL OVERPRINT)
57400 IF(XSIG.NE.TSIG(Q,KW))GO TO 281
57500 IF(ABS(Q(KW+3)-RR).LT.0.5)GO TO 6
57600 281 CONTINUE
57700 GO TO 1800
57800
57900 81 IF(RSN.NE.SN)GO TO 6
58000 1800 IF(IPG.EQ.0)GO TO 5800
58100 IF(RN(J+3).LT.XLFT)GO TO 6
58200 C OMIT SOME THINGS TO LEFT OF STAFF BEGINNING.
58300 GO TO 6800
58400 5800 IF(R.NE.7)GO TO 282
58500 6800 IF(R.LT.4)GO TO 810
58600 IF(R.EQ.44)GO TO 6801
58700 IF(R.GT.7)GO TO 810
58800 C NEXT FOR ITEMS WHERE P6 MAY GO PAST 200.
58900 IF(RWD.LT.5)GO TO 810
59000 6801 A=ABS(RN(J+7))
59100 IF(A.LT.2.OR.A.GT.7)GO TO 82
59200 C CATCHES TRILL WIGGLE OVER END OF LINE.
59300 282 IF(R.NE.5)GO TO 810
59400 IF(RN(J+3).LT.RLFT)GO TO 6
59500 C OMIT ENTERING SLURS. NEXT CHECKS FOR SLUR OVER END OF LINE
59600 82 IF(RN(J+6).GE.199.)RN(J+6)=200.
59700 C ****** 200.0 ABOVE IS SUBJECT TO CHANGE!
59800 810 KL=0
59900 CC IF(R.GT.2)GO TO 1810
60000 IF(R.EQ.1)GO TO 2810
60100 IF(R.NE.2)GO TO 1810
60200 IF(IPG.GE.0)GO TO 2810
60300 IF(RWD.LT.8)GO TO 2810
60400 C NEXT FOR FINDING CUES WHEN IN PARTS MODE. FINALLY GETS LAST NEEDED POINTER.
60500 IF(RN(J+10).GE.0)JCUE=K
60600 C NEXTS FINDS NOTES AND RESTS WITHOUT RHYTHM (P7 OR P9)
60700 2810 IF(RN(J+3)-PQ.GT.SPCPG)GO TO 1810
60800 C JUMP IF NOT IN SAME VERT. POS.
60900 IF(RT.NE.R)GO TO 1810
61000 C JUMP IF PREVIOUS ITEM WASN'T THE SAME
61100 CC IF(RN(J+9).NE.4.0/88.0)GO TO 3810
61200 C JUMP IF NOT A GRACE NOTE
61300 CC R=0
61400 C R=0 SO THAT GRACE NOTE WILL NEVER BE TOO CLOSE TO REG. NOTE.
61500 CC GO TO 1810
61600 3810 RS=9-R*2
61700 IF(RWD.GE.RS)GO TO 1810
61800 C JUMP IF WDCNT IS BIG ENOUGH
61900 KL=RS-RWD
62000 C SEND THE DIFFERENCE TO THE SUBROUTINE AND ADD A RHYTHM (1.0)
62100 1810 IF(IPG.LT.0)RN(J+2)=0
62200 C ALWAYS SET STAFF NUM TO 0 FOR PARTS.
62300 CALL QRN(J,KPN,K)
62400 C PUTS NEEDED THINGS INTO Q ARRAY
62500 RT=R
62600 PQ=RN(J+3)
62700 C SAVE THINGS FOR NEXT TIME AROUND LOOP.
62800 6 CONTINUE
62900
63000 IF(JCUE.NE.0)CALL CUES
63100
63200 C******↓↓↓↓↓↓ RHYTH RESET ↓↓↓↓↓↓↓↓
63300 CALL SORT(KPN)
63400 C SORTS Q ARRAY, PUTS IT BACK INTO RN
63500 23 LL=0
63600 C TO 'MOVE' INSTEAD OF 'JUSTIFY'
63700 CC J=1
63800 CC223 R=CODEN(KWDS,J,RN,K)
63900 CC IF(R.LE.3.OR.R.EQ.17.OR.R.EQ.18)GO TO 123
64000 CC J=J+1
64100 CC GO TO 223
64200 CC123 R8=ENDLN-RN(K+3)+2
64300 CC R4=0
64400 CC R7=0
64500 CC RS=0
64600 CC R9=0
64700 CC R5=10000
64800 C INSERT?? →→ IF(R8.GT.0)R9=200.
64900 CC33 CALL PTMOVE(RN,KWDS)
65000 C******* IS KQ SUPPOSED TO BE 0!!!!!!!!?????
65100 CALL SHFT0(KQ)
65200 20 CALL RESPC
65300 KNM(JNM)=KNM(JNM)+2
65400 C UPDATE THE FILE NAME
65500 GO TO 1344
65600 END
65700
65800 C************** REREAD DOES NOT WORK - SO FOLLOWING IS REPLACED BELOW.
65900 CXX SUBROUTINE READX(IDEV,NAME,IEXT,KEND,NUMS)
66000 CXX COMMON /PTR/INP(72)
66100 CXX DIMENSION FORM2(5),FORMT(5),NUMS(30)
66200 CXX DATA FORMT(1)/'('/,FORM2/'A1,','A2,','A3,','A4,','A5,'/
66300 CXX 1, FORM3/'30I)'/
66400 CXX1 FORMAT(72A1)
66500 CXXCC IEXT='MS'
66600 CXXCC ACCEPT 1,INP
66700 CXX KEND=0
66800 CXXC IDEV=DEVICE NUMBER (1=DSK, 5=TTY)
66900 CXX READ(IDEV,1,END=12)INP
67000 CXX DO 2 K=2,72
67100 CXX IF(INP(K).EQ.' ')GO TO 3
67200 CXX2 IF(INP(K).EQ.'.')GO TO 4
67300 CXX3 FORMT(3)=FORM3
67400 CXX FORMT(4)=' '
67500 CXX FORMT(5)=' '
67600 CXX5 FORMT(2)=FORM2(K-1)
67700 CXX REREAD FORMT,NAME,NUMS
67800 CXX GO TO 10
67900 CXX4 FORMT(3)=FORM2(1)
68000 CXXC CATCHES DOT
68100 CXX DO 7 N=K+1,72
68200 CXX7 IF(INP(N).EQ.' ')GO TO 8
68300 CXX8 FORMT(4)=FORM2(N-K-1)
68400 CXX FORMT(5)=FORM3
68500 CXX FORMT(2)=FORM2(K-1)
68600 CXX REREAD FORMT,NAME,K,IEXT,NUMS
68700 CXX CALL LO2UP(IEXT)
68800 CXX10 CALL LO2UP(NAME)
68900 CXX RETURN
69000 CXX12 KEND=-1
69100 CXX END
69200
69300 SUBROUTINE READX(IDEV,NAME,IEXT,KEND,NUMS)
69400 DIMENSION NUMS(1),RI(30)
69500 COMMON /PTR/INP(72) /JWDS/JWDS(1)
69600 EQUIVALENCE(INP,RI)
69700 100 FORMAT(A5,73A1)
69800 KEND=0
69900 C IDEV=DEVICE NUMBER (1=DSK, 5=TTY)
70000 READ(IDEV,100,END=12)NAME,K,INP
70100 IF(K.EQ.' ')GO TO 2
70200 IF(K.NE.'.')GO TO 8
70300 C NOW FOUND EXTENSION. GO PACK IT.
70400 DO 4 K=2,5
70500 4 NUMS(K)=' '
70600 DO 5 K=1,5
70700 IF(INP(K).EQ.' ')GO TO 6
70800 5 NUMS(K)=INP(K)
70900 6 CALL PACKX(IEXT,NUMS)
71000 CALL LO2UP(IEXT)
71100 GO TO 11
71200 2 K=1
71300 11 CALL ASCNUM(INP(K),RI,JWDS,M)
71400 C ASCNUM CHANGES ASCII TO NUMBERS, JWDS IS A DUMMY FOR NOW, M=HOW MANY
71500 DO 7 K=1,M
71600 7 NUMS(K)=RI(K)
71700 10 CALL LO2UP(NAME)
71800 RETURN
71900 8 TYPE 9
72000 9 FORMAT(' **** USE ONLY 5-LETTER NAMES. ONLY 1 EXT. CAN BE USED')
72100 STOP
72200 12 KEND=-1
72300 END
72400
72500 SUBROUTINE PACKX(NAM,KNM)
72600 DIMENSION KNM(5)
72700 DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
72800 1 , MM/"774000000000/
72900 NAM=0
73000 DO 12 K=5,1,-1
73100 NAM=NAM .OR. (KNM(K) .AND. MM)
73200 IF (K.EQ.1)RETURN
73300 17 IF (NAM.GE.0)GO TO 13
73400 NAM = (( NAM .AND. LL)/KK) .OR. JJ
73500 GO TO 12
73600 13 NAM = NAM / KK
73700 12 CONTINUE
73800 END
73900
74000 SUBROUTINE ASCNUM(I,RI,KNT,M)
74100 DIMENSION KNT(72),RI(72),I(72)
74200 INTEGER ZERO,NINE,KNT,J,I,DOT,BLA
74300 CC INTEGER*1 ZERO,NINE,KNT,J,I,DOT,BLA
74400 DATA DOT/'.'/,BLA/' '/,ZERO/'0'/,NINE/'9'/
74500 DO 10 K=1,72
74600 10 KNT(K)=-1
74700 IDEC=0
74800 M=1
74900 C=1.0
75000 R=0
75100 DO 5 K=1,72
75200 J=I(K)
75300 IF(J.EQ.BLA)GO TO 8
75400 IF(J.NE.DOT)GO TO 6
75500 IDEC=-1
75600 GO TO 5
75700 6 IF(J.GE.ZERO.AND.J.LE.NINE)GO TO 7
75800 CALL STOW(J,RI(M))
75900 KNT(M)=0
76000 GO TO 9
76100 7 IF(IDEC.NE.0)C=C*0.1
76200 CALL CONV(R,J)
76300 GO TO 5
76400 8 IF(R.EQ.0)GO TO 5
76500 A=R*C
76600 RI(M)=A
76700 KNT(M)=1
76800 R=0
76900 C=1.0
77000 IDEC=0
77100 9 M=M+1
77200 5 CONTINUE
77300 M=M-1
77400 END
77500
77600 SUBROUTINE CONV(R,J)
77700 CC INTEGER*1 J
77800 CC R=R*10.+J-48
77900 L=(J-'0')/536870912
78000 R=R*10.+L
78100 END
78200
78300 SUBROUTINE STOW(R,RI)
78400 RI=R
78500 END
78600
78700 SUBROUTINE ASC(R)
78800 200 FORMAT(' ',A1)
78900 WRITE(5,200)R
79000 END
79100 SUBROUTINE RNUM(R)
79200 201 FORMAT(F13.4)
79300 WRITE(5,201)R
79400 END
79500
79600 SUBROUTINE LO2UP(J)
79700 C CONVERTS ALL LOWER CASE TO UPPER CASE.
79800 J=J.AND..NOT.((J/2).AND."201004020100)
79900 END
80000
80100 FUNCTION TSIG(Q,J)
80200 DIMENSION Q(1)
80300 TSIG=IFIX(Q(J+5)*100.0+Q(J+6)+.5)
80400 C COMBINES METER NUMS. (2/4 = 204. ETC.)
80500 END